﻿using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using BLL;
using DevComponents.DotNetBar;
using Microsoft.Office.Interop.Excel;
using Application = Microsoft.Office.Interop.Excel.Application;

namespace GUI
{
    public partial class frmKetQua : DevComponents.DotNetBar.Office2007Form
    {
        DataSet _ds = new DataSet();
        private BOKy _ky;
        private BOSinhVien _student;
        private BOLog _log;
        private BOMonHoc _monhoc;
        DataSet _dsMonHoc = new DataSet();
        public frmKetQua()
        {
            InitializeComponent();
        }

        private void frmKetQua_Load(object sender, EventArgs e)
        {
            _ky = new BOKy();
            _ds = _ky.Binding();
            cbxKy.DataSource = _ds.Tables[0];
            cbxKy.DisplayMember = "TenKy";
            cbxKy.ValueMember = "Ky";
        }

        private void cbxKy_SelectedIndexChanged(object sender, EventArgs e)
        {
            int ky = cbxKy.SelectedIndex + 1; //Index bắt đầu từ 0, Ky bắt đầu từ 1 nên phải cộng 1 mới là mã kỳ
            _ds = _ky.GetLopByKy(ky);
            cbxLop.DataSource = _ds.Tables[0];
            cbxKy.DisplayMember = "TenLop";
            cbxLop.ValueMember = "TenLop";

            _ds = _ky.GetMonHocByKy(ky);
            cbxMonHoc.DataSource = _ds.Tables[0];
            cbxMonHoc.DisplayMember = "TenMonHoc";
            cbxMonHoc.ValueMember = "TenMonHoc";
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            dgvKetqua.Columns.Clear();
            int maVaitro = Session.member.MaVaiTro;

            //Nếu là admin hoặc giáo vụ thì hiển thị form cho nhập kết quả
            if (maVaitro == 1 || maVaitro == 2)
            {
                dgvKetqua.DataSource = null;
                btnCal.Enabled = true;
                dgvKetqua.ReadOnly = false;

                _student = new BOSinhVien();
                _ds = _student.GetSVByLop(cbxLop.SelectedValue.ToString());
                dgvKetqua.DataSource = _ds.Tables[0];
                dgvKetqua.Columns[0].HeaderText = "Tên SV";
                dgvKetqua.Columns[1].HeaderText = "Ngày sinh";

                //Thêm cột hiển thị số lần thi
                DataGridViewTextBoxColumn lanThi = new DataGridViewTextBoxColumn();
                dgvKetqua.Columns.Insert(2, lanThi);
                lanThi.HeaderText = "Lần thi";

                //Thêm cột hiển thị điểm thi
                DataGridViewTextBoxColumn diemThi = new DataGridViewTextBoxColumn();
                dgvKetqua.Columns.Insert(3, diemThi);
                diemThi.HeaderText = "Điểm thi";

                //Thêm cột hiển thị điểm thành phần
                DataGridViewTextBoxColumn diemThanhPhan = new DataGridViewTextBoxColumn();
                dgvKetqua.Columns.Insert(4, diemThanhPhan);
                diemThanhPhan.HeaderText = "Điểm thành phần";

                //Thêm cột hiển thị điểm tổng kết
                DataGridViewTextBoxColumn diemTongKet = new DataGridViewTextBoxColumn();
                dgvKetqua.Columns.Insert(5, diemTongKet);
                diemTongKet.HeaderText = "Điểm tổng kết";
                diemTongKet.ReadOnly = true;

                dgvKetqua.Columns[0].Width = 120;
                dgvKetqua.Columns[4].Width = 120;
                dgvKetqua.Columns[5].Width = 120;
            }
            //Nếu Thành Viên Đăng Nhập Là Sinh Viên Thì Hiển Thị Danh Sách Sinh Viên Với Tất Cả Điểm Số
            else
            {
                dgvKetqua.ReadOnly = true;
                _student = new BOSinhVien();
                _monhoc = new BOMonHoc();
                _dsMonHoc = _monhoc.LoadMaMonHoc(cbxMonHoc.SelectedValue.ToString());
                int mamonhoc = Convert.ToInt32(_dsMonHoc.Tables[0].Rows[0]["MaMonHoc"]);
                _ds = _student.GetKq(mamonhoc, cbxLop.SelectedValue.ToString());
                dgvKetqua.DataSource = _ds.Tables[0];
                dgvKetqua.Columns[0].HeaderText = "Tên SV";
                dgvKetqua.Columns[1].HeaderText = "Ngày sinh";
                dgvKetqua.Columns[2].HeaderText = "Lần thi";
                dgvKetqua.Columns[3].HeaderText = "Điểm thi";
                dgvKetqua.Columns[4].HeaderText = "Điểm thành phần";
                dgvKetqua.Columns[5].HeaderText = "Điểm tổng kết";

                foreach (DataGridViewRow row in dgvKetqua.Rows)
                {
                    int index = row.Index;
                    double diemtongket = Convert.ToDouble(dgvKetqua.Rows[index].Cells[5].Value.ToString());
                    if (diemtongket < 4.5)
                    {
                        dgvKetqua.Rows[index].Cells[5].Style.BackColor = Color.Red;
                        dgvKetqua.Rows[index].Cells[5].Style.ForeColor = Color.White;
                    }
                }
                btnCal.Enabled = false;
                btnSave.Enabled = false;

                dgvKetqua.Columns[0].Width = 120;
                dgvKetqua.Columns[4].Width = 120;
                dgvKetqua.Columns[5].Width = 120;
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            int ky = (int)cbxKy.SelectedValue;//Lấy mã môn học của môn học được chọn
            _monhoc = new BOMonHoc();
            _dsMonHoc = _monhoc.LoadMaMonHoc(cbxMonHoc.SelectedValue.ToString());
            int mamonhoc = Convert.ToInt32(_dsMonHoc.Tables[0].Rows[0]["MaMonHoc"]);
            string tenLop = cbxLop.SelectedValue.ToString();

            foreach(DataGridViewRow row in dgvKetqua.Rows)
            {
                int index = row.Index;
                _ds = _student.GetMaSV(dgvKetqua.Rows[index].Cells[0].Value.ToString());

                int count = dgvKetqua.Rows.Count;
                if(count > 0)
                {
                    string maSV = _ds.Tables[0].Rows[0]["MaSV"].ToString();
                    int lanThi = Convert.ToInt32(dgvKetqua.Rows[index].Cells[2].Value.ToString());
                    int diemThi = Convert.ToInt32(dgvKetqua.Rows[index].Cells[3].Value.ToString());
                    int diemThanhPhan = Convert.ToInt32(dgvKetqua.Rows[index].Cells[4].Value.ToString());
                    string diemTongKet = dgvKetqua.Rows[index].Cells[5].Value.ToString();

                    _student.InsertKq(maSV, ky, mamonhoc, tenLop, lanThi, diemThi, diemThanhPhan, diemTongKet);
                }
            }
            MessageBoxEx.EnableGlass = false;
            MessageBoxEx.Show("Lưu thành công !!!", "Thành công", MessageBoxButtons.OK, MessageBoxIcon.Information);
            _log = new BOLog();
            _log.AddLog(Session.member.TenThanhVien, " nhập điểm môn " + cbxMonHoc.SelectedValue + " cho lớp " + tenLop, DateTime.Now, "");
            btnOk.Enabled = true;
            frmKetQua_Load(sender, e);
        }

        private void btnCal_Click(object sender, EventArgs e)
        {
            foreach(DataGridViewRow row in dgvKetqua.Rows)
            {
                int index = row.Index;
                int diemThi = Convert.ToInt32(dgvKetqua.Rows[index].Cells[3].Value.ToString());
                int diemThanhPhan = Convert.ToInt32(dgvKetqua.Rows[index].Cells[4].Value.ToString());
                double diemTongKet = (diemThi*0.8 + diemThanhPhan*0.2);
                dgvKetqua.Rows[index].Cells[5].Value = diemTongKet;
                if(diemTongKet < 4.5)
                {
                    dgvKetqua.Rows[index].Cells[5].Style.BackColor = Color.Red;
                    dgvKetqua.Rows[index].Cells[5].Style.ForeColor = Color.White;
                }
            }
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            Dispose();
        }

        private void btnExcel_Click(object sender, EventArgs e)
        {
            try
            {
                ApplicationClass excel = new ApplicationClass();
                excel.Application.Workbooks.Add(true);

                Application oExcel_12 = null;
                Sheets oSheetsColl = null;
                Worksheet oSheet = null;
                Range oRange = null;
                Object oMissing = System.Reflection.Missing.Value;
                oExcel_12 = new Application();

                oExcel_12.Visible = true;

                oExcel_12.UserControl = true;

                oExcel_12.Workbooks.Add(oMissing);

                oSheetsColl = oExcel_12.Worksheets;

                oSheet = (Worksheet)oSheetsColl.Item["Sheet1"];

                for (int j = 0; j < dgvKetqua.Columns.Count; j++)
                {
                    oRange = (Range)oSheet.Cells[1, j + 1];
                    oRange.Value2 = dgvKetqua.Columns[j].HeaderText;
                }

                for (int i = 0; i < dgvKetqua.Rows.Count; i++)
                {
                    for (int j = 0; j < dgvKetqua.Columns.Count; j++)
                    {
                        for (int a = 2; a < dgvKetqua.Rows.Count + 2; a++)
                        {
                            string b = "B" + a;
                            oRange = (Range)oSheet.Cells[i + 2, j + 1];
                            oRange.Value2 = dgvKetqua.Rows[i].Cells[j].Value;
                            oSheet.Range[b].NumberFormat = "dd/mm/yyyy";
                        }
                    }
                }
                MessageBoxEx.EnableGlass = false;
                MessageBoxEx.Show("Xuất ra file Excel thành công !!!");
            }
            catch (Exception ex)
            {
                MessageBoxEx.Show(ex.Message);
            }
        }

        private void frmKetQua_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult dr;
            MessageBoxEx.EnableGlass = false;
            dr = MessageBoxEx.Show("Bạn có thật sự muốn thoát ?", "Thông báo", MessageBoxButtons.YesNo,
                                   MessageBoxIcon.Question);
            if (dr == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }
}